home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Atari Compendium
/
The Atari Compendium (Toad Computers) (1994).iso
/
files
/
umich
/
utils
/
wnx1091.lzh
/
WNXSKEL.C
< prev
next >
Wrap
C/C++ Source or Header
|
1991-10-15
|
5KB
|
216 lines
/*********************************************************************/
/* SAMPLE .WNX APPLICATION SKELETON */
/* portions borrowed from: */
/* started 5/28/85 R.Z. Copyright ATARI Corp. 1985 */
/*********************************************************************/
/*********************************************************************/
/* INCLUDE FILES */
/*********************************************************************/
#include <stdio.h>
#include <obdefs.h>
#include <gemdefs.h>
#include <osbind.h>
#include <xesblk.h>
#include <xesdefs.h>
/*********************************************************************/
/* DEFINES */
/*********************************************************************/
#define LASERC
#define TRUE 1
#define FALSE 0
#define ACCNAME "Flip's .ACC"
#define WI_KIND (SIZER|MOVER|FULLER|CLOSER|NAME)
#define NO_WINDOW (-1)
#define MIN_WIDTH (2*gl_wbox)
#define MIN_HEIGHT (3*gl_hbox)
/*********************************************************************/
/* EXTERNALS */
/*********************************************************************/
extern int gl_apid,_app,errno;
extern long base,stksize,stack;
extern struct __c {
int *cb_pcontrol;
int *cb_pglobal;
int *cb_pintin;
int *cb_pintout;
long *cb_padrin;
long *cb_padrout;
} _c, *_ad_c;
extern int control[], global[];
extern int_in[], int_out[];
extern long addr_in[], addr_out[];
/*********************************************************************/
/* GLOBAL VARIABLES */
/*********************************************************************/
int gl_hchar;
int gl_wchar;
int gl_wbox;
int gl_hbox; /* system sizes */
int phys_handle; /* physical workstation handle */
int handle; /* virtual workstation handle */
int wi_handle; /* window handle */
int top_window; /* handle of topped window */
int xdesk,ydesk,hdesk,wdesk;
int xold,yold,hold,wold;
int xwork,ywork,hwork,wwork; /* desktop and work areas */
int msgbuff[8]; /* event message buffer */
int keycode; /* keycode returned by event-keyboard */
int mx,my; /* mouse x and y pos. */
int butdown; /* button state tested for, UP/DOWN */
int ret; /* dummy return variable */
int hidden; /* current state of cursor */
int fulled; /* current state of window */
int contrl[12];
int intin[128];
int ptsin[128];
int intout[128];
int ptsout[128]; /* storage wasted for idiotic bindings */
int work_in[11]; /* Input to GSX parameter array */
int work_out[57]; /* Output from GSX parameter array */
int pxyarray[10]; /* input point array */
int menu_id;
xesparmblk xparmblk;
/****************************************************************/
/* open virtual workstation */
/****************************************************************/
open_vwork()
{
int i;
for(i=0;i<10;work_in[i++]=1);
work_in[10]=2;
handle=phys_handle;
v_opnvwk(work_in,&handle,work_out);
}
/* This is some stuff common to both .ACC and .PRG executables
which I do whenever they start up... */
void prg_acc_startup()
{
appl_init();
phys_handle=graf_handle(&gl_wchar,&gl_hchar,&gl_wbox,&gl_hbox);
open_vwork();
wi_handle=NO_WINDOW;
hidden=FALSE;
fulled=FALSE;
butdown=TRUE;
}
/****************************************************************/
/* dispatches all accessory tasks */
/****************************************************************/
multi()
{
int event;
while (TRUE) {
/* currently only messages... could change this to an
evnt_mesag call, but I like to keep it open... */
event = evnt_multi(MU_MESAG,
1,1,1,
0,0,0,0,0,
0,0,0,0,0,
msgbuff,0,0,&mx,&my,&ret,&ret,&keycode,&ret);
switch(msgbuff[0]){
case AC_OPEN:
program();
break;
}
}
}
program()
{
/* code for program's "guts" goes here... this is only called if
we're an .ACC or .PRG. A .WNX has to call this itself. */
}
/****************************************************************/
/* Accessory Init. Until First Event_Multi */
/****************************************************************/
main()
{
switch(_app)
{
case -1:
{
/* WNX */
xes_init(&xparmblk);
/* A .WNX doesn't have the variable __c, which is
its AES parameter block, fixed up during an
appl_init, so I have to do it myself. */
_c.cb_pcontrol=control;
_c.cb_pglobal=global;
_c.cb_pintin=int_in;
_c.cb_pintout=int_out;
_c.cb_padrin=addr_in;
_c.cb_padrout=addr_out;
_ad_c=&_c;
xes_genv(&xparmblk);
xes_pwindow(&xparmblk);
/* Fixes the WNX' i.d. name field */
strcpy(xparmblk.WNX_idname,"I AM A WNX");
xes_submit(&xparmblk);
break;
}
#ifdef LASERC
/* This is needed since LASER C doesn't make A0 = 0, but does
make p_parent null. I just make it so if LASERC == TRUE,
we know this is being run from the LASER C shell, and so
it will be a program... */
default:
{
_app=1;
prg_acc_startup();
program();
}
#else
case 1:
{
/* PROGRAM */
prg_acc_startup();
program();
break;
}
case 0:
{
/* ACCESSORY */
prg_acc_startup();
menu_id=menu_register(gl_apid,ACCNAME);
multi();
break;
}
#endif
}
}